Subject: AL

Envivo Bio, Inc.; Confidential

logo

1.1 Overview of microbial community composition

Figure 1 is an interactive figure showing the microbial community composition in each collected sample. Here, each color and shade corresponds to a different genus. For reference, domestic dogs (Canis familiaris) and gray wolves (Canis lupus) are different species that belong to the same genus (Canis).

You can interact with this figure by:

Figure 1: Microbial community composition of collected saliva, stool, and CapScan samples. CapScan samples are ordered from proximal to distal intestine (i.e., increasing distance from mouth). Taxonomic composition is reported at the genus rank. Genera present at <1% relative abundance across all samples are reported as “Other genera”. Note: Blue = Firmicutes; Yellow = Actinomycetes; Green = Bacteroidetes; Red = Proteobacteria; Purple = all other phyla. Shades of the same color (except purple) correspond to different genera from the same phylum.



1.2 High-resolution snapshot of community composition

Figure 2 is an interactive figure showing the microbial community composition at higher taxononomic resolution. Here, each row corresponds to a unique microbe.

You can interact with this figure by:



Figure 2: Heat map showing relative abundance of microbes in each sample (N = 266 total identified). Each row corresponds to a unique microbe and each column corresponds to an individual sample. Note the relative abundance colorscale is in log units.



1.3 Notable microbes detected

1.4 References

García-López, M., Meier-Kolthoff, J.P., Tindall, B.J., Gronow, S., Woyke, T., Kyrpides, N.C., et al. (2019) Analysis of 1,000 Type-Strain Genomes Improves Taxonomic Classification of Bacteroidetes. Front Microbiol 10: https://doi.org/10.3389/fmicb.2019.02083.

Mills, R.H., Dulai, P.S., Vázquez-Baeza, Y., Sauceda, C., Daniel, N., Gerner, R.R., et al. (2022) Multi-omics analyses of the ulcerative colitis gut microbiome link Bacteroides vulgatus proteases with disease severity. Nat Microbiol 7: 262–276.

Wu, S., Rhee, K.J., Albesiano, E., Rabizadeh, S., Wu, X., Yen, H.R., et al. (2009) A human colonic commensal promotes colon tumorigenesis via activation of T helper type 17 T cell responses. Nat Med 15: 1016–1022.

LS0tCnRpdGxlOiAiPGJyPiBUYXhvbm9taWMgcHJvZmlsaW5nIG9mIGJhY3RlcmlhbCBhbmQgYXJjaGFlYWwgY29tbXVuaXRpZXMgZnJvbSBzYWxpdmEsIHN0b29sLCBhbmQgQ2FwU2Nhbi1zYW1wbGVkIGd1dCBtZXRhZ2Vub21lcyIKb3V0cHV0OgogIGh0bWxfZG9jdW1lbnQ6CiAgICBkZl9wcmludDogcGFnZWQKICAgIHRvYzogdHJ1ZQogICAgdG9jX2Zsb2F0OiB0cnVlCiAgaHRtbF9ub3RlYm9vazogZGVmYXVsdAogIHBkZl9kb2N1bWVudDogZGVmYXVsdAotLS0KCi0tLQoKPHN0eWxlPgpkaXYuaGlnaGxpZ2h0IHsKYmFja2dyb3VuZC1jb2xvcjogI0YyRjJGMjsKcGFkZGluZzogMHB4Owpib3JkZXItcmFkaXVzOiAycHg7Cn0KCjwvc3R5bGU+CgojIyMgPGI+PGk+U3ViamVjdDogQUw8L2I+PC9pPgoqRW52aXZvIEJpbywgSW5jLjsgQ29uZmlkZW50aWFsKgoKYGBge3Igc2V0dXAsIGluY2x1ZGUgPSBGQUxTRX0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG8gPSBUUlVFKQpgYGAKCmBgYHtyIGFkZCBsb2dvLCBlY2hvID0gRkFMU0V9CmxvZ29fcGF0aCA8LSAiLi4vbG9nby9lbnZpdm8uc3ZnIgoKaHRtbHRvb2xzOjppbWcoc3JjID0ga25pdHI6OmltYWdlX3VyaShsb2dvX3BhdGgpLCAKICAgICAgICAgICAgICAgYWx0ID0gImxvZ28iLCAKICAgICAgICAgICAgICAgc3R5bGUgPSAicG9zaXRpb246YWJzb2x1dGU7IHRvcDowOyByaWdodDowOyBwYWRkaW5nOjEwcHg7IHdpZHRoOiAxNDVweDsgaGVpZ2h0OiA0MnB4IikKYGBgCgpgYGB7ciBsb2FkIHBhY2thZ2VzLCBpbmNsdWRlID0gRkFMU0V9CiMgTGlzdCByZXF1aXJlZCBwYWNrYWdlcwpjcmFuUGFja2FnZXMgPC0gYygiQmlvY01hbmFnZXIiLCAiZ2dwbG90MiIsICJkcGx5ciIsICJ0aWR5ciIsCiAgICAgICAgICAgICAgICAgICJhcGUiLCAiZ2dwbG90MiIsICJyZXNoYXBlMiIsICJwbG90bHkiLCAiaGVhdG1hcGx5IikKYmlvY1BhY2thZ2VzIDwtIGMoInBoeWxvc2VxIiwgIkJpb3N0cmluZ3MiKQoKIyBJbnN0YWxsIG1pc3NpbmcgQ1JBTiBwYWNrYWdlcwppbnN0YWxsZWRDUkFOIDwtIGNyYW5QYWNrYWdlcyAlaW4lIHJvd25hbWVzKGluc3RhbGxlZC5wYWNrYWdlcygpKQppZiAoYW55KGluc3RhbGxlZENSQU4gPT0gRkFMU0UpKSB7CiAgaW5zdGFsbC5wYWNrYWdlcyhjcmFuUGFja2FnZXNbIWluc3RhbGxlZENSQU5dLAogICAgICAgICAgICAgICAgICAgcmVwb3MgPSAnaHR0cDovL2NyYW4udXMuci1wcm9qZWN0Lm9yZycpCn0KCiMgSW5zdGFsbCBtaXNzaW5nIEJpb2NvbmR1Y3RvciBwYWNrYWdlcwppbnN0YWxsZWRCaW9jIDwtIGJpb2NQYWNrYWdlcyAlaW4lIHJvd25hbWVzKGluc3RhbGxlZC5wYWNrYWdlcygpKQppZiAoYW55KGluc3RhbGxlZEJpb2MgPT0gRkFMU0UpKSB7CiAgQmlvY01hbmFnZXI6Omluc3RhbGwoYmlvY1BhY2thZ2VzWyFpbnN0YWxsZWRCaW9jXSkKfQoKIyBMb2FkIHBhY2thZ2VzCmxhcHBseShjKGNyYW5QYWNrYWdlcywgYmlvY1BhY2thZ2VzKSwgbGlicmFyeSwgY2hhcmFjdGVyLm9ubHkgPSBUUlVFKQpgYGAKCmBgYHtyIGxvYWQgZGF0YSwgaW5jbHVkZSA9IEZBTFNFfQojIExvYWQgQ29zbW9zSUQgZGF0YSBhbmQgZm9ybWF0dGVkIG1ldGFkYXRhCmNvc21vcyA8LSByZWFkLmNzdihmaWxlID0gIi4uL2RhdGEvQ1AwNDYxOF9mb2xsb3dfdXBfMjAyMjA5MjAuY3N2IikKbWV0YSA8LSByZWFkLmNzdihmaWxlID0gIi4uL2RhdGEvQ1AwNDYxOF9mb2xsb3dfdXBfbWV0YWRhdGEuY3N2IikKYGBgCgpgYGB7ciBmb3JtYXQgZGF0YSwgaW5jbHVkZSA9IEZBTFNFfQojIFByZXBhcmUgdGF4X3RhYmxlIGFuZCBvdHVfdGFibGUgb2JqZWN0cwp0YXggPC0gY29zbW9zICU+JQogIHNlbGVjdChQaHlsdW0sIENsYXNzLCBPcmRlciwgRmFtaWx5LCBHZW51cywgU3BlY2llcywgU3RyYWluKSAlPiUKICBhcy5tYXRyaXggJT4lCiAgdGF4X3RhYmxlCgpzdGFydF9pbmQgPC0gZ3JlcCgiU3RyYWluIiwgY29sbmFtZXMoY29zbW9zKSkrMQpzdG9wX2luZCA8LSBuY29sKGNvc21vcyktMgphYnVuZGFuY2Vfc2NvcmVzIDwtIGNvc21vc1ssc3RhcnRfaW5kOnN0b3BfaW5kXSAlPiUgb3R1X3RhYmxlKC4sIHRheGFfYXJlX3Jvd3MgPSBUUlVFKQoKIyBSZWZvcm1hdCBzYW1wbGUgbmFtZXMgYW5kIG1ldGFkYXRhIHNhbXBsZSBuYW1lcyBzbyB0aGV5IG1hdGNoCmNvbG5hbWVzKGFidW5kYW5jZV9zY29yZXMpIDwtIGNvbG5hbWVzKGFidW5kYW5jZV9zY29yZXMpICU+JQogIGdzdWIoIlgiLCAiIiwgLikgJT4lCiAgZ3N1YigiXy4qIiwgIiIsIC4pICU+JQogIHBhc3RlMCgiRUJfIiwgLikKCnJvdy5uYW1lcyhtZXRhKSA8LSBtZXRhICU+JQogIHB1bGwoU2FtcGxlX251bWJlcikgJT4lCiAgcGFzdGUwKCJFQl8iLCAuKQoKc2FtX2RhdGEgPC0gc2FtcGxlX2RhdGEobWV0YSkKYGBgCgpgYGB7ciBidWlsZCBwaHlsb3NlcSwgaW5jbHVkZSA9IEZBTFNFfQojIEJ1aWxkIHBoeWxvc2VxIG9iamVjdApwcyA8LSBwaHlsb3NlcSh0YXgsIGFidW5kYW5jZV9zY29yZXMsIHNhbV9kYXRhKQpgYGAKCmBgYHtyIHRyYW5zZm9ybSBkYXRhLCBpbmNsdWRlID0gRkFMU0V9CiMgTG9nIHRyYW5zZm9ybQpwc0xvZyA8LSBwcyAlPiUgdHJhbnNmb3JtX3NhbXBsZV9jb3VudHMoLiwgZnVuY3Rpb24oeCkgbG9nKHggKyAxLCBiYXNlID0gMTApKQoKIyBSZWxhdGl2ZSBhYnVuZGFuY2UgdHJhbnNmb3JtCnBzUkEgPC0gcHMgJT4lIHRyYW5zZm9ybV9zYW1wbGVfY291bnRzKC4sIGZ1bmN0aW9uKHgpIHgvc3VtKHgpKjEwMCkKYGBgCgpgYGB7ciByYW5rIHBoeWxhLCBpbmNsdWRlID0gRkFMU0V9CnBoeV9yYW5rIDwtIHBzUkEgJT4lCiAgdGF4X2dsb20oLiwgdGF4cmFuayA9ICJQaHlsdW0iKSAlPiUKICBwc21lbHQgJT4lCiAgZ3JvdXBfYnkoUGh5bHVtKSAlPiUKICBzdW1tYXJpc2UobWVkaWFuID0gbWVkaWFuKEFidW5kYW5jZSkpCgpwaHlfcmFuayAlPiUgYXJyYW5nZShkZXNjKG1lZGlhbikpCmBgYAoKYGBge3Igc3ViamVjdCBzdWJzZXQsIGluY2x1ZGUgPSBGQUxTRX0KIyBTZXQgc3ViamVjdApzdWJqZWN0IDwtICJBTCIKCiMgU3Vic2V0IHRvIHN1YmplY3Qgc2FtcGxlcyBhbmQgZHJvcCBtaXNzaW5nIHRheGEKcHNTdWIgPC0gc3Vic2V0X3NhbXBsZXMocHMsIFN1YmplY3QgPT0gc3ViamVjdCkgJT4lCiAgcHJ1bmVfdGF4YSh0YXhhX3N1bXMoLikgPiAwLCAuKQoKIyBBZGQgcGxvdCBsYWJlbCBmb3IgZWFjaCBzYW1wbGUKc2FtcGxlX2RhdGEocHNTdWIpJFBsb3RfbGFiZWwgPC0gcGFzdGUwKHNhbXBsZV9uYW1lcyhwc1N1YiksICIgKCIsIHNhbXBsZV9kYXRhKHBzU3ViKSRTYW1wbGVfdHlwZSwgIikiKQoKIyBSZWxhdGl2ZSBhYnVuZGFuY2UgdHJhbnNmb3JtCnBzU3ViX3JhIDwtIHBzU3ViICU+JSB0cmFuc2Zvcm1fc2FtcGxlX2NvdW50cyguLCBmdW5jdGlvbih4KSB4L3N1bSh4KSoxMDApCmBgYAoKYGBge3IgcGxvdCBiYXIsIGluY2x1ZGUgPSBGQUxTRX0KIyBEZWZpbmUgTk9UIElOIG9wZXJhdG9yCiclIWluJScgPC0gZnVuY3Rpb24oeCx5KSEoJyVpbiUnKHgseSkpCgojIEFnZ2xvbWVyYXRlIGF0IEdlbnVzIGFuZCBtZWx0CnRheHJhbmsgPC0gIkdlbnVzIgptZWx0IDwtIHBzU3ViX3JhICU+JSB0YXhfZ2xvbSguLCB0YXhyYW5rID0gdGF4cmFuaykgJT4lIHBzbWVsdAoKIyBEZWZpbmUgbWFqb3IgcGh5bGEKbWFqb3JfcGh5IDwtIGMoIkZpcm1pY3V0ZXMiLCAiQWN0aW5vYmFjdGVyaWEiLCAiQmFjdGVyb2lkZXRlcyIsICJQcm90ZW9iYWN0ZXJpYSIpCgojIElkZW50aWZ5IGdlbmVyYSBwcmVzZW50IGluIDwxJSByZWxhdGl2ZSBhYnVuZGFuY2UgaW4gYWxsIHNhbXBsZXMKcmFyZV9nZW5lcmEgPC0gbWVsdCAlPiUKICBncm91cF9ieShTYW1wbGVfbnVtYmVyLCBHZW51cykgJT4lCiAgc3VtbWFyaXplKHN1bSA9IHN1bShBYnVuZGFuY2UpKSAlPiUKICB1bmdyb3VwKCkgJT4lCiAgZ3JvdXBfYnkoR2VudXMpICU+JQogIHN1bW1hcml6ZShtYXggPSBtYXgoc3VtKSkgJT4lCiAgZmlsdGVyKG1heCA8IDEpICU+JQogIHB1bGwoR2VudXMpCgojIENyZWF0ZSBuZXcgY29sdW1uIGNvbnRhaW5pbmcgbmFtZSBvZiBnZW51cyBpZiBhYm92ZSBjdXRvZmYgb3IgIk90aGVyIGdlbmVyYSIgaWYgbm90CmRmIDwtIG1lbHQgJT4lCiAgbXV0YXRlKFBoeV9ncm91cCA9IGNhc2Vfd2hlbihQaHlsdW0gJSFpbiUgbWFqb3JfcGh5IH4gIk90aGVyIHBoeWx1bSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUUlVFIH4gUGh5bHVtKSwKICAgICAgICAgUGh5X2dyb3VwID0gY2FzZV93aGVuKEdlbnVzICVpbiUgcmFyZV9nZW5lcmEgfiAiT3RoZXIgcGh5bHVtIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRSVUUgfiBQaHlfZ3JvdXApLAogICAgICAgICBUYXhfbGFiZWwgPSBjYXNlX3doZW4oR2VudXMgJWluJSByYXJlX2dlbmVyYSB+ICJBYU90aGVyIGdlbmVyYSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUUlVFIH4gR2VudXMpKSAlPiUKICBncm91cF9ieShTdWJqZWN0KSAlPiUKICBhcnJhbmdlKFN1YmplY3QsIFNhbXBsZV90eXBlKQoKIyBEZWZpbmUgb3JkZXIKcGh5X29yZGVyIDwtIGMoIk90aGVyIHBoeWx1bSIsCiAgICAgICAgICAgICAgICJQcm90ZW9iYWN0ZXJpYSIsCiAgICAgICAgICAgICAgICJCYWN0ZXJvaWRldGVzIiwKICAgICAgICAgICAgICAgIkFjdGlub2JhY3RlcmlhIiwKICAgICAgICAgICAgICAgIkZpcm1pY3V0ZXMiKSAlPiUgcmV2CgpnZW5fb3JkZXIgPC0gZGYgJT4lCiAgc2VsZWN0KFBoeV9ncm91cCwgVGF4X2xhYmVsKSAlPiUKICBtdXRhdGUoT3JkZXIgPSBtYXRjaChQaHlfZ3JvdXAsIHBoeV9vcmRlcikpICU+JQogIGFycmFuZ2UoT3JkZXIsIGRlc2MoVGF4X2xhYmVsKSkgJT4lCiAgZGlzdGluY3QgJT4lCiAgcHVsbChUYXhfbGFiZWwpCgpnZW5fb3JkZXIgPC0gZmFjdG9yKGdzdWIoIl5BYSIsICIiLCBnZW5fb3JkZXIpLCBsZXZlbHMgPSBnc3ViKCJeQWEiLCAiIiwgZ2VuX29yZGVyKSkgIyB0aGUgQWEgaXMgdG8gbWFrZSBzdXJlICJPdGhlciIgaXMgcGxvdHRlZCBhdCB0aGUgdG9wCgpkZiA8LSBkZiAlPiUKICBtdXRhdGUoVGF4X2xhYmVsID0gZmFjdG9yKGdzdWIoIl5BYSIsICIiLCBUYXhfbGFiZWwpLCBsZXZlbHMgPSBnZW5fb3JkZXIpKQoKIyBEZWZpbmUgY29sb3JzCnBoeV9jb2xvciA8LSBkYXRhLmZyYW1lKFBoeWx1bSA9IGMoIkFjdGlub2JhY3RlcmlhIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiT3RoZXIgcGh5bHVtIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQmFjdGVyb2lkZXRlcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZpcm1pY3V0ZXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcm90ZW9iYWN0ZXJpYSIpLAogICAgICAgICAgICAgICAgICAgICAgICBCYXNlX2NvbG9yID0gYygiI0ZGQjcyNCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIjODMyQ0ZGIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiM2NEM2MkEiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIzA3MkFDOCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIjRTkzQjRGIikpCgpwaHlfY29sb3IgPC0gcGh5X2NvbG9yW21hdGNoKHBoeV9vcmRlciwgcGh5X2NvbG9yJFBoeWx1bSksXQoKIyBEYXRhIGZyYW1lIGFzIGlucHV0LCBkYXRhIGZyYW1lIHdpdGggbmV3IGNvbHVtbiBvZiBoZXggY29kZXMgYXMgb3V0cHV0CmNvbF9wYWxldHRlIDwtIGRmICU+JQogIHNlbGVjdChQaHlfZ3JvdXAsIFRheF9sYWJlbCkgJT4lCiAgZGlzdGluY3QgJT4lCiAgbXV0YXRlKEhleF9jb2RlID0gTkEpCgoKZm9yKHBoeSBpbiBwaHlfY29sb3IkUGh5bHVtKSB7CiAgdGVzdCA8LSBjb2xfcGFsZXR0ZSAlPiUKICAgIGZpbHRlcihQaHlfZ3JvdXAgPT0gcGh5KSAlPiUKICAgIHB1bGwoVGF4X2xhYmVsKSAlPiUKICAgIGRyb3BsZXZlbHMgJT4lCiAgICBsZXZlbHMKICAKICB0YXguY29sb3IgPC0gY29sb3JSYW1wUGFsZXR0ZShjKHBoeV9jb2xvciRCYXNlX2NvbG9yW21hdGNoKHBoeSwgcGh5X2NvbG9yJFBoeWx1bSldLCAid2hpdGUiKSkKICBjb2x0ZXN0IDwtIHRheC5jb2xvcihsZW5ndGgodGVzdCkrMikgJT4lCiAgICAuWy1sZW5ndGgoLildCiAgY29sX3BhbGV0dGUkSGV4X2NvZGVbbWF0Y2godGVzdCwgY29sX3BhbGV0dGUkVGF4X2xhYmVsKV0gPC0gY29sdGVzdAp9Cgpjb2xfcGFsZXR0ZSA8LSBjb2xfcGFsZXR0ZSAlPiUgYXJyYW5nZShmYWN0b3IoVGF4X2xhYmVsLCBsZXZlbHMgPSBnZW5fb3JkZXIpKQpgYGAKCjxkaXYgY2xhc3M9ImhpZ2hsaWdodCI+CiMjIyAxLjEgT3ZlcnZpZXcgb2YgbWljcm9iaWFsIGNvbW11bml0eSBjb21wb3NpdGlvbgo8L2Rpdj4KCkZpZ3VyZSAxIGlzIGFuIGludGVyYWN0aXZlIGZpZ3VyZSBzaG93aW5nIHRoZSBtaWNyb2JpYWwgY29tbXVuaXR5IGNvbXBvc2l0aW9uIGluIGVhY2ggY29sbGVjdGVkIHNhbXBsZS4gSGVyZSwgZWFjaCBjb2xvciBhbmQgc2hhZGUgY29ycmVzcG9uZHMgdG8gYSBkaWZmZXJlbnQgZ2VudXMuIEZvciByZWZlcmVuY2UsIGRvbWVzdGljIGRvZ3MgKCpDYW5pcyBmYW1pbGlhcmlzKikgYW5kIGdyYXkgd29sdmVzICgqQ2FuaXMgbHVwdXMqKSBhcmUgZGlmZmVyZW50IHNwZWNpZXMgdGhhdCBiZWxvbmcgdG8gdGhlIHNhbWUgZ2VudXMgKCpDYW5pcyopLgo8YnI+PGJyPgpZb3UgY2FuIGludGVyYWN0IHdpdGggdGhpcyBmaWd1cmUgYnk6CgoqIEhvdmVyaW5nIHRoZSBjdXJzb3Igb3ZlciBhIGNvbG9yIGluIHRoZSBzdGFja2VkIGJhciB0byBzZWUgdGhlIHRheG9ub21pYyBpZGVudGl0eSwgc2FtcGxlIHR5cGUsIGFuZCByZWxhdGl2ZSBhYnVuZGFuY2UgY29ycmVzcG9uZGluZyB0byB0aGF0IGNvbG9yIGFuZCBiYXIKKiBDbGlja2luZyBhbmQgZHJhZ2dpbmcgdGhlIGN1cnNvciBvdmVyIGEgcG9ydGlvbiBvZiB0aGUgZmlndXJlIHRvIHpvb20KKiBTaW5nbGUtY2xpY2tpbmcgYSBnZW51cydzIG5hbWUgaW4gdGhlIGxlZ2VuZCB0byByZW1vdmUgdGhhdCBnZW51cyBmcm9tIHRoZSBmaWd1cmUKKiBEb3VibGUtY2xpY2tpbmcgKDx1PnZlcnkgcXVpY2tseTwvdT4pIGEgZ2VudXMncyBuYW1lIGluIHRoZSBsZWdlbmQgdG8gb25seSBzaG93IHRoYXQgZ2VudXMKYGBge3IsIG91dC53aWR0aCA9ICIxMDAlIiwgZWNobyA9IEZBTFNFfQojIFBsb3QKcEJhciA8LSBwbG90X2x5KGRmLCB4ID0gflBsb3RfbGFiZWwsIHkgPSB+QWJ1bmRhbmNlLCB0eXBlID0gImJhciIsCiAgICAgICAgICAgICBjb2xvciA9IH5UYXhfbGFiZWwsIGNvbG9ycyA9IGNvbF9wYWxldHRlJEhleF9jb2RlLAogICAgICAgICAgICAgdGV4dHBvc2l0aW9uID0gIm5vbmUiLAogICAgICAgICAgICAgdGV4dCA9IH5wYXN0ZSgiPGI+R2VudXM6PC9iPiIsIFRheF9sYWJlbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIjxicj48YnI+IiwgIjxiPlNhbXBsZSB0eXBlOjwvYj4iLCBTYW1wbGVfdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIjxicj4iLCAiPGI+UmVsYXRpdmUgYWJ1bmRhbmNlOjwvYj4iLCBwYXN0ZTAocm91bmQoQWJ1bmRhbmNlLCBkaWdpdHMgPSAxKSwgIiUiKSksCiAgICAgICAgICAgICBob3ZlcmluZm8gPSAidGV4dCIpICU+JQogIGxheW91dCh4YXhpcyA9IGxpc3QodGl0bGUgPSAiPGI+U2FtcGxlPC9iPiIsCiAgICAgICAgICAgICAgICAgICAgICB0aWNrcyA9ICJvdXRzaWRlIiksCiAgICAgICAgIHlheGlzID0gbGlzdCh0aXRsZSA9ICI8Yj5SZWxhdGl2ZSBhYnVuZGFuY2UgKCUpPC9iPiIsCiAgICAgICAgICAgICAgICAgICAgICB0aWNrcyA9ICJvdXRzaWRlIiksCiAgICAgICAgIGJhcm1vZGUgPSAic3RhY2siLAogICAgICAgICBmb250ID0gbGlzdChmYW1pbHkgPSAiQXJpYWwiKSkKCnBCYXIkeCRsYXlvdXQkeWF4aXMkbGluZWNvbG9yIDwtICIjMDAwMDAwIgpwQmFyCmBgYAoqKkZpZ3VyZSAxOioqIE1pY3JvYmlhbCBjb21tdW5pdHkgY29tcG9zaXRpb24gb2YgY29sbGVjdGVkIHNhbGl2YSwgc3Rvb2wsIGFuZCBDYXBTY2FuIHNhbXBsZXMuIENhcFNjYW4gc2FtcGxlcyBhcmUgb3JkZXJlZCBmcm9tIHByb3hpbWFsIHRvIGRpc3RhbCBpbnRlc3RpbmUgKCppKi4qZSouLCBpbmNyZWFzaW5nIGRpc3RhbmNlIGZyb20gbW91dGgpLiBUYXhvbm9taWMgY29tcG9zaXRpb24gaXMgcmVwb3J0ZWQgYXQgdGhlIGdlbnVzIHJhbmsuIEdlbmVyYSBwcmVzZW50IGF0IDwxJSByZWxhdGl2ZSBhYnVuZGFuY2UgYWNyb3NzIGFsbCBzYW1wbGVzIGFyZSByZXBvcnRlZCBhcyAiT3RoZXIgZ2VuZXJhIi4gPHU+Tm90ZTo8L3U+IEJsdWUgPSAqRmlybWljdXRlcyo7IFllbGxvdyA9ICpBY3Rpbm9teWNldGVzKjsgR3JlZW4gPSAqQmFjdGVyb2lkZXRlcyo7IFJlZCA9ICpQcm90ZW9iYWN0ZXJpYSo7IFB1cnBsZSA9IGFsbCBvdGhlciBwaHlsYS4gU2hhZGVzIG9mIHRoZSBzYW1lIGNvbG9yIChleGNlcHQgcHVycGxlKSBjb3JyZXNwb25kIHRvIGRpZmZlcmVudCBnZW5lcmEgZnJvbSB0aGUgc2FtZSBwaHlsdW0uCgpgYGB7ciwgaW5jbHVkZSA9IEZBTFNFfQojIE9yZGluYXRpb24tYmFzZWQKcEhlYXRfb3JkIDwtIHBsb3RfaGVhdG1hcChwc1N1Yl9yYSwgbWV0aG9kID0gIk5NRFMiLCBkaXN0YW5jZSA9ICJicmF5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICB0YXhhLmxhYmVsID0gIlN0cmFpbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4LmxhYmVsID0gMzAwKQoKIyBSZXRyaWV2ZSByb3cgYW5kIHRheG9uIG9yZGVycwpyb3dfb3JkZXIgPC0gcEhlYXRfb3JkJHBsb3RfZW52JHRheGEub3JkZXIgJT4lIHJldgp0YXhfb3JkZXIgPC0gdGF4X3RhYmxlKHBzU3ViX3JhKVttYXRjaChyb3dfb3JkZXIsIHJvd25hbWVzKHRheF90YWJsZShwc1N1Yl9yYSkpKSxdICU+JQogIGFzLmRhdGEuZnJhbWUgJT4lCiAgbXV0YXRlKHRheG9uID0gcm93bmFtZXMoLiksCiAgICAgICAgIEFidW5kYW5jZSA9IDEsCiAgICAgICAgIFNhbXBsZSA9IHN1YmplY3QpCmBgYAoKYGBge3IsIGluY2x1ZGUgPSBGQUxTRX0KIyBQcmVwYXJlIGRhdGEKeCA8LSBwc1N1Yl9yYSAlPiUgb3R1X3RhYmxlICU+JSBhcy5kYXRhLmZyYW1lCmNvbG5hbWVzKHgpIDwtIGxhcHBseShjb2xuYW1lcyh4KSwgZ3JlcCwgc2FtcGxlX2RhdGEocHNTdWJfcmEpJFBsb3RfbGFiZWwsIHZhbHVlID0gVFJVRSkgJT4lIHVubGlzdAoKIyBBZGQgdGF4b25vbXkKeCA8LSBjYmluZCh4LCB0YXhfdGFibGUocHNTdWJfcmEpKQoKIyBSZW9yZGVyIHJvd3MgYW5kIGNvbHVtbnMgdG8gbWF0Y2ggb3JkaW5hdGlvbgp4IDwtIHhbbWF0Y2gocm93X29yZGVyLCByb3duYW1lcyh4KSksXQoKIyBTZXQgaG92ZXJ0ZXh0Cm5zYW1wIDwtIG5zYW1wbGVzKHBzU3ViX3JhKQpob3Zlcl9zdHJhaW4gPC0geFssIDE6bnNhbXBdCmhvdmVyX3N0cmFpbltdIDwtIHBhc3RlMCgiPGI+TWljcm9iZTo8L2I+ICIsIHgkU3RyYWluLCAiXG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgIjxiPlJlbGF0aXZlIGFidW5kYW5jZTo8L2I+ICIpCmhvdmVyX3N0cmFpbiA8LSBhcy5tYXRyaXgoaG92ZXJfc3RyYWluKQoKaG92ZXJfYWJ1bmQgPC0geFssIDE6bnNhbXBdICU+JSByb3VuZCguLCBkaWdpdHMgPSAyKSAlPiUgYXMuZGF0YS5mcmFtZQpob3Zlcl9hYnVuZCA8LSBhcHBseShob3Zlcl9hYnVuZCwgMiwgcGFzdGUwLCAiJSIpCmhvdmVyX2FidW5kIDwtIGFzLm1hdHJpeChob3Zlcl9hYnVuZCkKCmhvdmVyX3RheCA8LSB4WywgMTpuc2FtcF0KaG92ZXJfdGF4W10gPC0gcGFzdGUwKCJcbiBcbjxiPlBoeWx1bTo8L2I+ICIsIHgkUGh5bHVtLCAiXG4iLAogICAgICAgICAgICAgICAgICAgIjxiPkNsYXNzOjwvYj4gIiwgeCRDbGFzcywgIlxuIiwKICAgICAgICAgICAgICAgICAgICI8Yj5PcmRlcjo8L2I+ICIsIHgkT3JkZXIsICJcbiIsCiAgICAgICAgICAgICAgICAgICAiPGI+RmFtaWx5OjwvYj4gIiwgeCRGYW1pbHksICJcbiIsCiAgICAgICAgICAgICAgICAgICAiPGI+R2VudXM6PC9iPiAiLCB4JEdlbnVzLCAiXG4iKQpob3Zlcl90YXggPC0gYXMubWF0cml4KGhvdmVyX3RheCkKCmhvdmVydGV4dCA8LSBtYXRyaXgocGFzdGUwKGhvdmVyX3N0cmFpbiwgaG92ZXJfYWJ1bmQsIGhvdmVyX3RheCksCiAgICAgICAgICAgICAgICBucm93ID0gbnJvdyhob3Zlcl90YXgpLCBuY29sID0gbmNvbChob3Zlcl90YXgpKQoKIyBQZXJmb3JtIGxvZzEwIHRyYW5zZm9ybWF0aW9uIG9uIHJlbGF0aXZlIGFidW5kYW5jZXMKZGF0YSA8LSBsb2coeFssIDE6bnNhbXBdLCBiYXNlID0gMTApCmRhdGFbc2FwcGx5KGRhdGEsIGlzLmluZmluaXRlKV0gPC0gTkEKYGBgCjxicj48YnI+Cgo8ZGl2IGNsYXNzPSJoaWdobGlnaHQiPgojIyMgMS4yIEhpZ2gtcmVzb2x1dGlvbiBzbmFwc2hvdCBvZiBjb21tdW5pdHkgY29tcG9zaXRpb24KPC9kaXY+CkZpZ3VyZSAyIGlzIGFuIGludGVyYWN0aXZlIGZpZ3VyZSBzaG93aW5nIHRoZSBtaWNyb2JpYWwgY29tbXVuaXR5IGNvbXBvc2l0aW9uIGF0IGhpZ2hlciB0YXhvbm9ub21pYyByZXNvbHV0aW9uLiBIZXJlLCBlYWNoIHJvdyBjb3JyZXNwb25kcyB0byBhIHVuaXF1ZSBtaWNyb2JlLgo8YnI+PGJyPgpZb3UgY2FuIGludGVyYWN0IHdpdGggdGhpcyBmaWd1cmUgYnk6CgoqIEhvdmVyaW5nIHRoZSBjdXJzb3Igb3ZlciBhIGNlbGwgdG8gc2VlIHRoYXQgbWljcm9iZSdzIGdlbnVzIGFuZCBzcGVjaWVzIChhbmQgc3RyYWluIHdoZW4gYXZhaWxhYmxlKSwgcmVsYXRpdmUgYWJ1bmRhbmNlLCBhbmQgZnVsbCB0YXhvbm9taWMgY2xhc3NpZmljYXRpb24KKiBDbGlja2luZyBhbmQgZHJhZ2dpbmcgdGhlIGN1cnNvciBvdmVyIGEgcG9ydGlvbiBvZiB0aGUgZmlndXJlIHRvIHpvb20KCjxicj48YnI+CmBgYHtyLCBvdXQuaGVpZ2h0ID0gIjc1MHB4IiwgZWNobyA9IEZBTFNFfQojIFNldCBzYW1wbGUgbmFtZXMKI2NvbG5hbWVzKGRhdGEpIDwtIGMoIkVCXzI2OSAoc2FsaXZhKSIsICJFQl8yNzAgKENhcFNjYW4pIiwgIkVCXzI3MSAoQ2FwU2NhbikiLAojICAgICAgICAgICAgICAgICAgICAiRUJfMjcyIChDYXBTY2FuKSIsICJFQl8yNzMgKENhcFNjYW4pIiwgIkVCXzI3NCAoc3Rvb2wpIikKCiMgUHJlcGFyZSB0YXhvbm9teSByb3cgc2lkZQpyb3dfc2lkZSA8LSB4ICU+JSBzZWxlY3QoUGh5bHVtKQpyb3dfc2lkZSRQaHlsdW1bcm93X3NpZGUkUGh5bHVtICUhaW4lIG1ham9yX3BoeV0gPC0gIk90aGVyIHBoeWxhIgpyb3dfc2lkZSRQaHlsdW0gPC0gZmFjdG9yKHJvd19zaWRlJFBoeWx1bSwgbGV2ZWxzID0gYygiT3RoZXIgcGh5bGEiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJvdGVvYmFjdGVyaWEiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQmFjdGVyb2lkZXRlcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJBY3Rpbm9iYWN0ZXJpYSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJGaXJtaWN1dGVzIikpCgojIFBsb3QKcEhlYXQgPC0gaGVhdG1hcGx5KGRhdGEsCiAgICAgICAgICAgICAgICAgICBSb3d2ID0gRkFMU0UsCiAgICAgICAgICAgICAgICAgICBDb2x2ID0gRkFMU0UsCiAgICAgICAgICAgICAgICAgICBjb2xvcnMgPSB2aXJpZGlzOjp2aXJpZGlzKDEwKSwKICAgICAgICAgICAgICAgICAgIHJvd19zaWRlX2NvbG9ycyA9IHJvd19zaWRlLAogICAgICAgICAgICAgICAgICAgcm93X3NpZGVfcGFsZXR0ZSA9IGMoIkFjdGlub2JhY3RlcmlhIiA9ICIjRkZCNzI0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJCYWN0ZXJvaWRldGVzIiA9ICIjNjRDNjJBIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJGaXJtaWN1dGVzIiA9ICIjMDcyQUM4IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcm90ZW9iYWN0ZXJpYSIgPSAiI0U5M0I0RiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiT3RoZXIgcGh5bGEiID0gIiM4MzJDRkYiKSwKICAgICAgICAgICAgICAgICAgIHN1YnBsb3RfbWFyZ2luID0gMC4wMSwKICAgICAgICAgICAgICAgICAgIHN1YnBsb3Rfd2lkdGhzID0gYygwLjksIDAuMDcpLAogICAgICAgICAgICAgICAgICAgc2lkZV9jb2xvcl9jb2xvcmJhcl9sZW4gPSAwLjMsCiAgICAgICAgICAgICAgICAgICBwbG90X21ldGhvZCA9ICJwbG90bHkiLAogICAgICAgICAgICAgICAgICAgY3VzdG9tX2hvdmVydGV4dCA9IGhvdmVydGV4dCwKICAgICAgICAgICAgICAgICAgIHhsYWIgPSAiPGI+U2FtcGxlPC9iPiIsCiAgICAgICAgICAgICAgICAgICB5bGFiID0gIjxiPk1pY3JvYmU8L2I+IiwKICAgICAgICAgICAgICAgICAgIGNvbG9yYmFyX3hwb3MgPSAxLjAxOSwKICAgICAgICAgICAgICAgICAgIGNvbG9yYmFyX3lwb3MgPSAwLjUsCiAgICAgICAgICAgICAgICAgICBjb2xvcmJhcl9sZW4gPSAwLjMpICU+JQogIGxheW91dCh4YXhpcyA9IGxpc3Qoc2hvd2dyaWQgPSBGQUxTRSksCiAgICAgICAgIHlheGlzID0gbGlzdChzaG93Z3JpZCA9IEZBTFNFLAogICAgICAgICAgICAgICAgICAgICAgc2hvd3RpY2tsYWJlbHMgPSBGQUxTRSksCiAgICAgICAgIGZvbnQgPSBsaXN0KGZhbWlseSA9ICJBcmlhbCIpKSAlPiUKICBjb2xvcmJhcih0aXRsZSA9ICJSZWxhdGl2ZSBhYnVuZGFuY2UiLAogICAgICAgICAgIHRpY2t2YWxzID0gYygtMSwgMCwgMSksCiAgICAgICAgICAgdGlja3RleHQgPSBjKCIwLjElIiwgIjElIiwgIjEwJSIpKQoKIyBGb3JtYXQgcm93IHNpZGUKcEhlYXQkeCRsYXlvdXQkeGF4aXMyJHRpY2t0ZXh0IDwtICJQaHlsdW0iCnBIZWF0JHgkbGF5b3V0JHhheGlzJGxpbmVjb2xvciA8LSAiIzAwMDAwMCIKcEhlYXQkeCRsYXlvdXQkeGF4aXMyJGxpbmVjb2xvciA8LSAiIzAwMDAwMCIKcEhlYXQkeCRsYXlvdXQkeWF4aXMkbGluZWNvbG9yIDwtICIjMDAwMDAwIgpwSGVhdCR4JGxheW91dCRsZWdlbmQkeWFuY2hvciA8LSAiYm90dG9tIgpwSGVhdApgYGAKKipGaWd1cmUgMjoqKiBIZWF0IG1hcCBzaG93aW5nIHJlbGF0aXZlIGFidW5kYW5jZSBvZiBtaWNyb2JlcyBpbiBlYWNoIHNhbXBsZSAoTiA9IDI2NiB0b3RhbCBpZGVudGlmaWVkKS4gRWFjaCByb3cgY29ycmVzcG9uZHMgdG8gYSB1bmlxdWUgbWljcm9iZSBhbmQgZWFjaCBjb2x1bW4gY29ycmVzcG9uZHMgdG8gYW4gaW5kaXZpZHVhbCBzYW1wbGUuIE5vdGUgdGhlIHJlbGF0aXZlIGFidW5kYW5jZSBjb2xvcnNjYWxlIGlzIGluIGxvZyB1bml0cy4KCjxicj48YnI+Cgo8ZGl2IGNsYXNzPSJoaWdobGlnaHQiPgojIyMgMS4zIE5vdGFibGUgbWljcm9iZXMgZGV0ZWN0ZWQKPC9kaXY+CgoqICpCYWN0ZXJvaWRlcyo6CiAgKiBQcm9kdWN0aW9uIG9mIHByb3RlYXNlcyBmcm9tIGEgZmV3IGRpZmZlcmVudCBzcGVjaWVzIGxpbmtlZCB0byBndXQgaW5mbGFtbWF0aW9uLCBzdWNoIGFzICpCYWN0ZXJvaWRlcyB2dWxnYXR1cyogKE1pbGxzICpldCBhbCouLCAyMDIyKSBhbmQgKkJhY3Rlcm9pZGVzIGZyYWdpbGlzKiAoV3UgKmV0IGFsKi4sIDIwMDkpCiAgKiA8dT5Ob3RlOjwvdT4gR2VuZXJhICpCYWN0ZXJvaWRlcyogYW5kICpQaG9jYWVpY29sYSogYXJlIHZlcnkgY2xvc2VseSByZWxhdGVkLCB3aXRoIGEgcmVjZW50IHJlY2xhc3NpZmljYXRpb24gb2Ygc29tZSAqQmFjdGVyb2lkZXMqIGFzICpQaG9jYWVpY29sYSogKEdhcmPDrWEtTMOzcGV6ICpldCBhbCouLCAyMDE5KS4gVGhlcmUgYXJlIGNvbmZsaWN0aW5nIHRheG9ub21pYyBhc3NpZ25tZW50cyBpbiB0aGlzIGRhdGFzZXQgKCplLmcuKiwgZ2VudXMgaWRlbnRpZmllZCBhcyAqUGhvY2FlaWNvbGEqIGJ1dCBzdHJhaW4gbGlzdGVkIHVuZGVyICpCYWN0ZXJvaWRlcyopIC0tIHRvIGhlbHAgaW50ZXJwcmV0YXRpb24sIHJlZ2FyZCAqQmFjdGVyb2lkZXMqIGFuZCAqUGhvY2FlaWNvbGEqIGFzICoqb25lKiogZ2VudXMuCjxicj48YnI+CgoKPGRpdiBjbGFzcz0iaGlnaGxpZ2h0Ij4KIyMjIDEuNCBSZWZlcmVuY2VzCjwvZGl2PgoKR2FyY8OtYS1Mw7NwZXosIE0uLCBNZWllci1Lb2x0aG9mZiwgSi5QLiwgVGluZGFsbCwgQi5KLiwgR3Jvbm93LCBTLiwgV295a2UsIFQuLCBLeXJwaWRlcywgTi5DLiwgKmV0IGFsKi4gKDIwMTkpIEFuYWx5c2lzIG9mIDEsMDAwIFR5cGUtU3RyYWluIEdlbm9tZXMgSW1wcm92ZXMgVGF4b25vbWljIENsYXNzaWZpY2F0aW9uIG9mICpCYWN0ZXJvaWRldGVzKi4gKkZyb250IE1pY3JvYmlvbCogKioxMDoqKiBodHRwczovL2RvaS5vcmcvMTAuMzM4OS9mbWljYi4yMDE5LjAyMDgzLgo8YnI+PGJyPgpNaWxscywgUi5ILiwgRHVsYWksIFAuUy4sIFbDoXpxdWV6LUJhZXphLCBZLiwgU2F1Y2VkYSwgQy4sIERhbmllbCwgTi4sIEdlcm5lciwgUi5SLiwgKmV0IGFsKi4gKDIwMjIpIE11bHRpLW9taWNzIGFuYWx5c2VzIG9mIHRoZSB1bGNlcmF0aXZlIGNvbGl0aXMgZ3V0IG1pY3JvYmlvbWUgbGluayAqQmFjdGVyb2lkZXMgdnVsZ2F0dXMqIHByb3RlYXNlcyB3aXRoIGRpc2Vhc2Ugc2V2ZXJpdHkuICpOYXQgTWljcm9iaW9sKiAqKjc6KiogMjYy4oCTMjc2Lgo8YnI+PGJyPgpXdSwgUy4sIFJoZWUsIEsuSi4sIEFsYmVzaWFubywgRS4sIFJhYml6YWRlaCwgUy4sIFd1LCBYLiwgWWVuLCBILlIuLCAqZXQgYWwqLiAoMjAwOSkgQSBodW1hbiBjb2xvbmljIGNvbW1lbnNhbCBwcm9tb3RlcyBjb2xvbiB0dW1vcmlnZW5lc2lzIHZpYSBhY3RpdmF0aW9uIG9mIFQgaGVscGVyIHR5cGUgMTcgVCBjZWxsIHJlc3BvbnNlcy4gKk5hdCBNZWQqICoqMTU6KiogMTAxNuKAkzEwMjIu